package org.abc.fund.dto.dataSource;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * JoinQuant Python 脚本返回结果的 DTO
 * 支持多种数据类型的返回
 */
@Data
public class JoinQuantResultDTO {

    private String status;
    
    private String message;
    
    @JsonProperty("dataType")
    private String dataType;
    
    /**
     * 支持两种格式：
     * 1. dataCollectionPy.py 使用 "total" 字段
     * 2. jq_fund_comprehensive_collector.py 使用 "totalRecords" 字段
     */
    @JsonProperty("total")
    private Integer total;
    
    @JsonProperty("totalRecords")
    private Integer totalRecords;
    
    @JsonProperty("cleanedRecords")
    private Integer cleanedRecords;
    
    @JsonProperty("removedRecords")
    private Integer removedRecords;
    
    /**
     * 获取总记录数，兼容两种格式
     * dataCollectionPy.py 使用 "total" 字段，jq_fund_comprehensive_collector.py 使用 "totalRecords" 字段
     */
    public Integer getTotalRecords() {
        if (totalRecords != null) {
            return totalRecords;
        }
        // 如果 totalRecords 为 null，使用 total 字段（dataCollectionPy.py 格式）
        return total;
    }
    
    /**
     * 获取清理后的记录数，兼容 dataCollectionPy.py（该脚本不返回此字段，返回 null）
     */
    public Integer getCleanedRecords() {
        // dataCollectionPy.py 不返回 cleanedRecords，返回 null 或使用 totalRecords
        if (cleanedRecords != null) {
            return cleanedRecords;
        }
        // 如果没有 cleanedRecords，使用 totalRecords 或 total 作为默认值
        return getTotalRecords();
    }
    
    /**
     * 获取移除的记录数，兼容 dataCollectionPy.py（该脚本不返回此字段，返回 0）
     */
    public Integer getRemovedRecords() {
        // dataCollectionPy.py 不返回 removedRecords，返回 null，默认为 0
        return removedRecords != null ? removedRecords : 0;
    }
    
    /**
     * Raw data as list of maps - useful for dynamic deserialization
     * This field maps to the "data" field in JSON from Python scripts
     */
    @JsonProperty("data")
    private List<Map<String, Object>> rawData;
    
    private String timestamp;
}
